#ifndef	POINT_R
#define	POINT_R

#include "Object_r.h"

typedef struct Point POINT;
typedef struct PointClass POINT_CLASS;

/* ----------------------------------------------------------------------------------------------- *
 *	POINT : точка в 2-мерном пространстве (целочисленные координаты)
 */

struct Point
{
	const OBJECT _; // POINT является наследником OBJECT =>
	                // каждый экземпляр POINT содержит в начале себя OBJECT

	int x, y; // координаты
};

/* ----------------------------------------------------------------------------------------------- *
 *	POINT_CLASS : мета-информация описывающая тип POINT
 *	отличаются от OBJECT_CLASS только "хвостом" массива указателей на методы типа POINT
 */

struct PointClass
{
	const OBJECT_CLASS _; // POINT_CLASS является наследником OBJECT_CLASS =>
	                      // каждый экземпляр POINT_CLASS содержит в начале себя OBJECT_CLASS

	// дополнительные указатели на методы типа POINT: ...

	void (* pfnDraw) (const void * _pSelf);
};

/* ----------------------------------------------------------------------------------------------- *
 *	вспомогательные функции для вызова методов базового типа
 *		допустим вызов этой функции для наследников POINT
 */

void base_draw(const void * _pClass, const void * _pSelf);

#endif
